function run( gameID, mapstring, players ) {
	var game = new irinori.Game( gameID );
	var selfIndex;

	game.InitMap( irinori.Map.DecodeMapString( 16, 12, mapstring ) );

	for ( var i = 0; i < players.length; i++ )
	{
		player = new irinori.Player( players[i].playerName, players[i].playerID );
		player.initRobot( players[i].posX, players[i].posY, players[i].direction, players[i].robotType, players[i].spawnX, players[i].spawnY );
		game.AddPlayer( player );

		if ( players[i].self )
		{
			selfIndex = i;
            game.m_clientPlayer = player;
		}
	}

	game.InitRegisterDeck();
	game.m_players[selfIndex].m_cards = game.m_registerDeck.CardStringToCards( players[selfIndex].cards );

	var registerView = new irinori.RegisterView( game.m_clientPlayer, document.getElementById( "registers" ), document.getElementById( "hand" ), document.getElementById( "ready" ));
	registerView.Draw( game );

	var robotStatusView = new irinori.RobotStatusView( game.m_clientPlayer, document.getElementById("robotStatus") );
	robotStatusView.Draw();

	var engine = new irinori.engine();
	engine.m_gameview.Draw( game );
}
